public class OutClass {
/*    public int data1=1;
    private int data2=2;
    int data3=3;
    public static int data4=4;
    public void outMethodA(){
        innerClass inner=new innerClass();
        System.out.println("data1:"+data1);
        System.out.println("innerData:"+inner.innerData);
    }
    public  void outMethodB(){
        //new一个out对象
        OutClass out=new OutClass();
        System.out.println(data4);
        System.out.println(out.data1);
        System.out.println("data4:"+data4);
    }*/
    static class InnerClass2{
         public  void innerMethod(){
            System.out.println("这是一个静态的内部类");
        }
    }

    //定义一个实例内部类
/*     class innerClass{
        int innerData=10;
    //在实例内部类当中：可以访问任意访问修饰限定符的成员
    //在实例内部类当中创建一个方法
       public void innerMethod(){
           // 在实例内部类中可以直接访问外部类中：任意访问限定符修饰的成员
           data1=10;
           data2=20;
           data3=30;
           data4=40;
           outMethodA();
           outMethodB();
           System.out.println("data1:"+data1);
           System.out.println("data2:"+data2);
           System.out.println("data3:"+data3);
           System.out.println("data4:"+data4);
           // 如果外部类和实例内部类中具有相同名称成员时，优先访问的是内部类自己的
           int data1=1;
           System.out.println("内部：data1:"+data1);
           // 如果要访问外部类同名成员时候，必须：外部类名称.this.同名成员名字
           System.out.println("外部：data1:"+OutClass.this.data1);
       }
    }*/

    public static void main(String[] args) {
        // 静态内部类对象创建(不需要先创建外部类的对象)
        InnerClass2 inner=new InnerClass2();
        //静态内部类的成员访问
        inner.innerMethod();
    }


    public static void main1(String[] args) {
        // 要访问实例内部类中成员，必须要创建实例内部类的对象
        // 而普通内部类定义与外部类成员定义位置相同，因此创建实例内部类对象时必须借助外部类
        // 创建实例内部类对象
        //OutClass.innerClass inner=new OutClass().new innerClass();
        // 上述语法比较怪异，也可以先将外部类对象先创建出来，然后再创建实例内部类对象
        OutClass out=new OutClass();
        OutClass.innerClass inner=out.new innerClass();
        //inner.innerMethod();
        out.outMethodA();
    }
}
